from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool

from ..database import Base
from ..main import app, get_db

SQLALCHEMY_DATABASE_URL = "sqlite://"

engine = create_engine(
    SQLALCHEMY_DATABASE_URL,
    connect_args={"check_same_thread": False},
    poolclass=StaticPool,
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base.metadata.create_all(bind=engine)


def override_get_db():
    try:
        db = TestingSessionLocal()
        yield db
    finally:
        db.close()


app.dependency_overrides[get_db] = override_get_db

client = TestClient(app)


def test_create_user():
    response = client.post(
        "/users/",
        json={"email": "example@mail.com", "password": "userpaswd", "salary": 100000,
              "date": "2025-01-01",
              }
    )
    assert response.status_code == 200, response.text
    data = response.json()
    assert data["email"] == "example@mail.com"

    response = client.post(
        "/token",
        data={"username": "example@mail.com",
              "password": "userpaswd",
              }
    )
    assert response.status_code == 200

    response = client.post(
        "/token",
        data={"username": "example@mail.com",
              "password": "wrongpasswd",
              }
    )
    assert response.status_code == 401
